home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
report.arc
/
REPORT.ASM
next >
Wrap
Assembly Source File
|
1984-06-20
|
6KB
|
184 lines
COMMENT * REPORT.COM Written by James L. Johnsen
402 Beech Street
Fort Washington Md. 20744
Home Phone (301) 292-7169 *
;
.RADIX 16 ;ALL NUMERICS ENTERED ARE NOW BASE 16.
STACKSEG SEGMENT STACK ;FAKE OUT THE LINKER.
STACKSEG ENDS
CODESEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODESEG,DS:CODESEG,ES:NOTHING
ORG 100
EFFZERO EQU 0F0
ZEROEFF EQU 0F
; MOVE EVERYTHING TO STORAGE
MOV WORD PTR [STORAX],AX
MOV WORD PTR [STORBX],BX
MOV WORD PTR [STORCX],CX
MOV WORD PTR [STORDX],DX
MOV WORD PTR [STORSP],SP
MOV WORD PTR [STORBP],BP
MOV WORD PTR [STORSI],SI
MOV WORD PTR [STORDI],DI
MOV WORD PTR [STORCS],CS
MOV WORD PTR [STORDS],DS
MOV WORD PTR [STORSS],SS
MOV WORD PTR [STORES],ES
; PROCESS ALL THE VALUES
MOV WORD PTR [VARIBLE1],'XA'
MOV AX,WORD PTR [STORAX]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'XB'
MOV AX,WORD PTR [STORBX]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'XC'
MOV AX,WORD PTR [STORCX]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'XD'
MOV AX,WORD PTR [STORDX]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'PS'
MOV AX,WORD PTR [STORSP]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'PB'
MOV AX,WORD PTR [STORBP]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'IS'
MOV AX,WORD PTR [STORSI]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'ID'
MOV AX,WORD PTR [STORDI]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'SC'
MOV AX,WORD PTR [STORCS]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'SD'
MOV AX,WORD PTR [STORDS]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'SS'
MOV AX,WORD PTR [STORSS]
CALL PROCESS1
MOV WORD PTR [VARIBLE1],'SE'
MOV AX,WORD PTR [STORES]
CALL PROCESS1
; THEN RESTORE ALL THE REGISTERS
MOV AX,WORD PTR [STORAX]
MOV BX,WORD PTR [STORBX]
MOV CX,WORD PTR [STORCX]
MOV DX,WORD PTR [STORDX]
MOV SP,WORD PTR [STORSP]
MOV BP,WORD PTR [STORBP]
MOV SI,WORD PTR [STORSI]
MOV DI,WORD PTR [STORDI]
MOV DS,WORD PTR [STORDS]
MOV SS,WORD PTR [STORSS]
MOV ES,WORD PTR [STORES]
INT 20
PROCESS1:
MOV BYTE PTR [STORAL],AL ;AL TO STORAGE
MOV BYTE PTR [STORAH],AH ;AH TO STORAGE
CALL HEXDEC ;CONVERT TO ASCII
CALL MOVE_TO_VARIABLES ;MOVE ASCII TO STRING
XOR AX,AX ;CLEAR AX REG
CALL SEND_REPORT ;THEN REPORT CONTENTS
RET ;AND RETURN TO CALLER
MOVE_TO_VARIABLES:
MOV AL,BYTE PTR [LOW_NIBBLEAL] ;LOW NIBBLE OF AL TO AL
MOV BYTE PTR [VARIBLE5],AL ;AL TO LOWNIB POS IN STRING
MOV AL,BYTE PTR [HI_NIBBLEAL] ;HI NIBBLE OF AL TO AL
MOV BYTE PTR [VARIBLE4],AL ;AL TO HINIB POS IN STRING
MOV AL,BYTE PTR [LOW_NIBBLEAH] ;LOW NIBBLE OF AH TO AL
MOV BYTE PTR [VARIBLE3],AL ;AL TO LOWNIB FOR AH POS
MOV AL,BYTE PTR [HI_NIBBLEAH] ;HI NIBBLE OF AH TO AL
MOV BYTE PTR [VARIBLE2],AL ;AL TO HINIB FOR AH POS
RET ;AND RETURN TO CALLER
HEXDEC: XOR AX,AX ;CLEAR AX REG
MOV AL,BYTE PTR [STORAL] ;GET VALUE
AND AL,ZEROEFF ;MASK OFF HI NIBBLE
CALL PROC_LOWNIBBLE ;AND GET THE ASCII FOR IT
MOV BYTE PTR [LOW_NIBBLEAL],AL ;THEN MOVE THAT TO STORAGE
XOR AX,AX ;CLEAR THE AX REG
MOV AL,BYTE PTR [STORAL] ;GET THE VALUE AGAIN
CALL PROC_HINIBBLE ;TO PROCESS THE HIGH NIBBLE
CALL PROC_LOWNIBBLE ;THEN TO THE SAME JOB AGAIN
MOV BYTE PTR [HI_NIBBLEAL],AL ;MOVE IT TO STORAGE
XOR AX,AX ;CLEAR THE AX REGISTER AGAIN
MOV AL,BYTE PTR [STORAH] ;MOVE THE AH REG VALUE INTO AL
AND AL,ZEROEFF ;AND MASK OFF THE HI NIBBLE
CALL PROC_LOWNIBBLE ;AND GET THE ASCII VALUE OF IT
MOV BYTE PTR [LOW_NIBBLEAH],AL ;THEN STORE IT
XOR AX,AX ;CLEAR THE AX REGISTER AGAIN
MOV AL,BYTE PTR [STORAH] ;AND GET THE AH REG VALUE AGAIN
CALL PROC_HINIBBLE ;PROCESS FOR THE HI NIBBLE
CALL PROC_LOWNIBBLE ;TO THE SAME JOB AGAIN
MOV BYTE PTR [HI_NIBBLEAH],AL ;AND STORE IT
XOR AX,AX ;CLEAR AX AGAIN
RET ;AND RETURN TO CALLER
PROC_LOWNIBBLE:
DAA ;IF >9 THEN ADD 06
PUSH AX ;WHICH SET AUX_CARRY_FLAG
LAHF ;SO LOAD THE FLAGS TO CHECK
AND AH,10 ;MASK ALL EXCEPT AUX_FLAG
CMP AH,10 ;CHECK FOR FLAG SET
JNZ OVER1 ;IF IT ISN'T SET JUST ADD 30H
POP AX ;RESTORE THE SAVED DATA
ADD AL,31 ;ELSE IT'S SET, ADD 31 [ >9 ]
JMP OVER2 ;DON'T ADD AGAIN, JUMP OVER IT
OVER1: POP AX ;ADDING 30H IS FOR NUMBERS
ADD AL,30 ;ADDING 31H IS FOR A through F
OVER2: RET ;RETURN TO CALLER
PROC_HINIBBLE:
XOR CX,CX ;CLEAR CX, JUST TO BE SURE
AND AL,EFFZERO ;MASK OFF LEAST SIGNIFICANT NIBB
MOV CL,04 ;HOW MANY TIMES TO SHIFT?
SHR AL,CL ;THEN MOVE MOST SN TO LEAST SN
RET ;RETURN TO CALLER
SEND_REPORT:
MOV SI,OFFSET REPORT1 ;POINT TO STRING
XOR CX,CX ;CLEAR CX, JUST TO BE SURE
MOV CL,3DH ;HOW MANY CHARACTERS TO SEND
NEXT: LODSB ;LOAD INTO AL POINTED BY SI
MOV AH,0EH ;MOVE VIDEO FUNCTION INTO AH
MOV BH,00 ;WRITE TTY TO PAGE ZERO(0)
INT 10 ;DO IT
LOOP NEXT ;LOOP IS, CX=CX-1 TILL CX=0000
RET ;WHEN CX=0000, RETURN
REPORT1: DB 'The '
VARIBLE1: DW 0
DB ' Register Has The Value '
VARIBLE2: DB 0
VARIBLE3: DB 0
VARIBLE4: DB 0
VARIBLE5: DB 0
DB ' HEX in it at the moment.',0AH,0DH
STORAL: DB 0
STORAH: DB 0
STORAX: DW 0
STORBX: DW 0
STORCX: DW 0
STORDX: DW 0
STORSP: DW 0
STORBP: DW 0
STORSI: DW 0
STORDI: DW 0
STORCS: DW 0
STORDS: DW 0
STORSS: DW 0
STORES: DW 0
LOW_NIBBLEAL: DB 0
HI_NIBBLEAL: DB 0
LOW_NIBBLEAH: DB 0
HI_NIBBLEAH: DB 0
CODESEG ENDS
END
SS: DW 0
STORES: DW 0
LOW_NIBBLEAL: DB 0
HI_NIBBLEAL: DB 0
LOW_NIBBLEAH: DB 0
HI_NIBBLEAH: DB 0
CODES